
import java.util.concurrent.*;

public class AccountWithoutSync {
    private static Account account = new Account();//实例化一个账户对象account

    public static void main(String[] args) {
        //使用Executors工厂类中的newCachedThreadPool()方法创建一个可缓存线程池
        ExecutorService executor = Executors.newCachedThreadPool();

        for (int i = 0; i < 100; i++) {//使用循环在线程池中创建100个线程并执行
            executor.execute(new AddPennyTask());//线程任务均为存1便士
        }

        executor.shutdown();//关闭线程池 - 停止接收新任务

        //isTerminated()方法 - 当调用shutdown()方法后，并且所有提交的任务完成后返回为true
        while (!executor.isTerminated()){//当线程池关闭，并且线程池中的所有任务执行完毕时，跳出循环
        }

        System.out.println("What is balance?"+account.getBalance());//输出余额
    }

    private static class AddPennyTask implements Runnable{//定义一个存1便士的内部类 - 实现了Runnable接口
        public void run(){//重写run()方法
            account.deposit(1);//调用deposit()方法在账户中存入1便士
        }
    }

    private static class Account{//定义一个账户类 - 内部类
        private int balance = 0;//成员变量 - 余额 - 初始化为0

        public int getBalance(){//成员方法 - 获取余额
            return  balance;
        }

        public void  deposit(int amount){//成员方法 - 存款
            int newBalance = balance + amount;//新的余额 = 原来的余额+存进来的数目
            try {
                Thread.sleep(5);//暂停5毫秒
            }
            catch (InterruptedException ex){
            }
            balance = newBalance;
        }
    }
}

